home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / dev / m2 / ModGen.lha / ModGen / Source / MGRequest.mod < prev    next >
Text File  |  1995-04-20  |  18KB  |  532 lines

  1. (*---------------------------------------------------------------------------
  2.   :Program.    MGRequest.mod
  3.   :Contents.   Oberfläche für ModGen
  4.   :Author.     Frank Lömker
  5.   :Copyright.  FreeWare
  6.   :Language.   Modula-2
  7.   :Translator. Turbo Modula-2 V1.40
  8.   :Imports.    NoFragLib,GadToolsBox[Jan van den Baard],ReqTools[Nico François]
  9.   :Imports.    MGTools, MGGui, ReqToolsSupport [Frank]
  10.   :History.    1.0 [Frank] 17-Apr-95
  11.   :History.        ModGen basiert direkt auf OG V37.11 von Thomas Igracki
  12.   :History.        und GenOberon V1.0 von Kai Bolay und Jan van den Baard.
  13.   :Bugs.       keine bekannt
  14. ---------------------------------------------------------------------------*)
  15.  
  16. IMPLEMENTATION MODULE MGRequest;
  17.  
  18. FROM SYSTEM IMPORT LONGSET,ADR,CAST,ADDRESS,STRING,MAKEID;
  19. FROM M2Lib IMPORT wbStarted,_ErrorReq;
  20. FROM Workbench IMPORT DiskObjectPtr,NO_ICON_POSITION,WBMsg;
  21. FROM Icon IMPORT GetDiskObject,FreeDiskObject,PutDiskObject;
  22. FROM ReqTools IMPORT rtEZRequestTags;
  23. FROM MGTools IMPORT MConfig;
  24. IMPORT y:=SYSTEM, g:=MGgui, mt:=MGTools, e:=Exec, d:=Dos, I:=Intuition,
  25.        gt:=GadTools, u:=Utility, w:=Workbench, C:=Classes,
  26.        rt:=ReqTools, gtx:=GadToolsBox,
  27.        st:=String;
  28.  
  29. TYPE str7=ARRAY [0..6] OF CHAR;
  30.      str40=ARRAY [0..40] OF CHAR;
  31.      str60=ARRAY [0..60] OF CHAR;
  32.      Pstr60=POINTER TO str60;
  33.      TScrNode=RECORD
  34.                 succ,pred:ADDRESS; pad:INTEGER;
  35.                 name:ADDRESS; str:str7;
  36.               END;
  37.      TConHead=RECORD
  38.                 form,size,pref:LONGINT;
  39.                 vers,versSize:LONGINT;
  40.                 version:CARDINAL;
  41.                 genm,genmSize:LONGINT;
  42.               END;
  43. VAR ScrNode:TScrNode;
  44.     ConHead:TConHead;
  45.     filereq:rt.FileRequesterPtr;
  46.     patGui,patMod:ARRAY [0..60] OF CHAR;
  47.     lock:LONGINT;
  48.  
  49. PROCEDURE Request (text,data:ADDRESS);
  50. VAR ptr:ADDRESS;
  51. BEGIN
  52.   IF mt.args.nogui=d.DOSFALSE THEN
  53.     ptr:=ADR(data);
  54.     rtEZRequestTags (text,ADR("_OK"),NIL,ptr,
  55.                      rt.Window,g.MGWnd,rt.ezReqTitle,ADR("ModGen V1.0"),
  56.                      rt.LockWindowTag,TRUE,rt.Underscore,"_",
  57.                      rt.ezFlags,LONGSET{rt.ezReqCenterText},u.TAG_DONE);
  58.   ELSE
  59.     d.VPrintf (text,ADR(data));
  60.     d.VPrintf (ADR("\n"),NIL);
  61.   END;
  62. END Request;
  63.  
  64. PROCEDURE Overwrite (name: (*@N*)ARRAY OF CHAR): BOOLEAN;
  65. VAR ptr,ptr2:ADDRESS;
  66. BEGIN
  67.   ptr:=ADR(name); ptr2:=ADR(ptr);
  68.   IF mt.args.nogui=d.DOSFALSE THEN
  69.     RETURN rtEZRequestTags (ADR('"%s" already exists!\nOverwrite?'),ADR("_Yes|_No"),NIL,ptr2,
  70.                       rt.Window,g.MGWnd,rt.ezReqTitle,ADR("ModGen Request"),
  71.                       rt.LockWindowTag,TRUE,rt.Underscore,"_",
  72.                       rt.ezFlags,LONGSET{rt.ezReqCenterText},u.TAG_DONE)#0;
  73.   ELSE
  74.     RETURN rtEZRequestTags (ADR('"%s" already exists!\nOverwrite?'),ADR("_Yes|_No"),NIL,ptr2,
  75.                       rt.ezReqTitle,ADR("ModGen Request"),
  76.                       rt.Underscore,"_",
  77.                       rt.ezFlags,LONGSET{rt.ezReqCenterText},u.TAG_DONE)#0;
  78.   END;
  79. END Overwrite;
  80.  
  81. (* Open a file carefully. *)
  82. PROCEDURE OpenSafe (name: (*@N*)ARRAY OF CHAR): d.FileHandlePtr;
  83. VAR handle: d.FileHandlePtr;
  84. BEGIN
  85.   handle := d.Open (ADR(name), d.MODE_OLDFILE);
  86.   IF handle # NIL THEN
  87.     d.Close (handle);
  88.     IF NOT Overwrite (name) THEN RETURN CAST(d.FileHandlePtr,4); END;
  89.   END;
  90.   RETURN d.Open (ADR(name), d.MODE_NEWFILE);
  91. END OpenSafe;
  92.  
  93. PROCEDURE startSave (start:BOOLEAN);
  94. CONST titel="Saving Modula Source...";
  95. BEGIN
  96.   IF mt.args.nogui=d.DOSFALSE THEN
  97.     IF start THEN
  98.       I.SetWindowTitles (g.MGWnd,ADR(titel),ADDRESS(-1));
  99.       lock:=rt.rtLockWindow (g.MGWnd);
  100.     ELSE
  101.       I.SetWindowTitles (g.MGWnd,ADR("ModGen V1.0"),ADDRESS(-1));
  102.       rt.rtUnlockWindow (g.MGWnd,lock);
  103.     END;
  104.   ELSE
  105.     IF start THEN
  106.       d.VPrintf (ADR(titel),NIL);
  107.       d.VPrintf (ADR("\n"),NIL);
  108.     END;
  109.   END;
  110. END startSave;
  111.  
  112. PROCEDURE Enable (id:INTEGER);
  113. BEGIN
  114.   gt.GT_SetGadgetAttrs (g.MGGadgets[id],g.MGWnd,NIL,
  115.                         C.GA_Disabled,FALSE,u.TAG_DONE);
  116. END Enable;
  117.  
  118. PROCEDURE Disable (id:INTEGER);
  119. BEGIN
  120.   gt.GT_SetGadgetAttrs (g.MGGadgets[id],g.MGWnd,NIL,
  121.                         C.GA_Disabled,TRUE,u.TAG_DONE);
  122. END Disable;
  123.  
  124. PROCEDURE Showtext (id:INTEGER;text:ADDRESS);
  125. BEGIN
  126.   gt.GT_SetGadgetAttrs (g.MGGadgets[id],g.MGWnd,NIL,
  127.                         gt.GTST_String,text,u.TAG_DONE);
  128. END Showtext;
  129.  
  130. PROCEDURE FileReq (VAR name:ARRAY OF CHAR;id:INTEGER;save:BOOLEAN):BOOLEAN;
  131. CONST titGui="Open GUI";
  132.       titMod="Save Modula Source As";
  133.       titScr="Save Screen Source As";
  134. VAR ptr,tit,help:Pstr60;
  135.     file,dir:mt.str256;
  136. BEGIN
  137.   IF id=g.GDSource THEN
  138.     ptr:=ADR(patGui); tit:=ADR(titGui);
  139.   ELSE
  140.     ptr:=ADR(patMod);
  141.     IF id=g.GDDest THEN tit:=ADR(titMod);
  142.                    ELSE tit:=ADR(titScr); END;
  143.   END;
  144.   IF save THEN INCL (filereq^.flags,rt.fReqSave);
  145.           ELSE EXCL (filereq^.flags,rt.fReqSave); END;
  146.   st.strcpy (dir,name);
  147.   st.strcpy (file,d.FilePart(ADR(dir)));
  148.   help:=ADDRESS(d.PathPart(ADR(dir))); help^[0]:=0C;
  149.   rt.rtChangeReqAttr (filereq,rt.fiDir,ADR(dir),
  150.                               rt.fiMatchPat,ptr,u.TAG_DONE);
  151.   IF rt.rtFileRequest (filereq, ADR(file),STRING(tit),
  152.                rt.Window,g.MGWnd,rt.LockWindowTag,TRUE,
  153.                rt.ReqPos,rt.ReqPosPointer,u.TAG_DONE) THEN
  154.     st.strcpy (name,filereq^.dir);
  155.     IF d.AddPart (ADR(name),ADR(file),HIGH(name)+1) THEN END;
  156.     st.strcpy (ptr^,filereq^.matchPat);
  157.     ptr:=ADR(name);
  158.     Showtext (id,ptr);
  159.     RETURN TRUE;
  160.   END;
  161.   RETURN FALSE;
  162. END FileReq;
  163.  
  164. PROCEDURE about;
  165. CONST s1="ModGen V1.0, (c) 1995 by Frank Lömker\n\nTurbo Modula-2 SourceCodeGenerator for GadToolsBox\n(c) by Jan van den Baard\n\n";
  166.       s2="Based on OG V37.11 (c) by Thomas Igracki\nand GenOberon V1.0 (c) by Kai Bolay &\nJan van den Baard\n\n";
  167.       s3="Written using Turbo Modula-2 (c) by Amritpal Mann\n\nreqtools.library (c) by Nico François";
  168. VAR str:ARRAY [1..116+98+88+3] OF CHAR;
  169. BEGIN
  170.   str:=s1;
  171.   st.strcat (str,s2);
  172.   st.strcat (str,s3);
  173.   Request (ADR(str),NIL);
  174. (*  Request (ADR("ModGen V1.0, (c) 1995 by Frank Lömker\n\n"
  175.                "Turbo Modula-2 SourceCodeGenerator for GadToolsBox\n"
  176.                "(c) by Jan van den Baard\n\n"
  177.                "Based on OG V37.11 (c) by Thomas Igracki\n"
  178.                "and GenOberon V1.0 (c) by Kai Bolay &\n"
  179.                "Jan van den Baard\n\n"
  180.                "Written using Turbo Modula-2 (c) by Amritpal Mann\n\n"
  181.                "reqtools.library (c) by Nico François"),NIL); *)
  182. END about;
  183.  
  184. PROCEDURE saveicon (name:(*@N*)ARRAY OF CHAR);
  185. CONST IconName="modula:Icons/txt";
  186.       IError='Unable to load Icon\n"modula:Icons/txt"';
  187. VAR icon:DiskObjectPtr;
  188. BEGIN
  189.   IF mt.icon IN MConfig THEN
  190.     icon:=GetDiskObject (ADR(name));  (* Icon schon da ? *)
  191.     IF icon=NIL THEN
  192.       icon:=GetDiskObject (ADR(IconName));
  193.       IF icon#NIL THEN
  194.         icon^.do_CurrentX:=NO_ICON_POSITION;
  195.         icon^.do_CurrentY:=NO_ICON_POSITION;
  196.         IF NOT PutDiskObject (ADR(name),icon) THEN
  197.           Request (ADR('Unable to save Icon for\n"%s"'),ADR(name));
  198.           FreeDiskObject (icon);
  199.         END;
  200.         FreeDiskObject (icon);
  201.       ELSE
  202.         Request (ADR(IError),NIL);
  203.       END;
  204.     ELSE
  205.       FreeDiskObject (icon);
  206.     END;  (* IF icon=NIL *)
  207.   END;  (* IF icon *)
  208. END saveicon;
  209.  
  210. PROCEDURE ZeigListe (source:(*@N*)mt.str256);
  211. VAR error:LONGINT;
  212.     ptr:ADDRESS;
  213. BEGIN
  214.   lock:=rt.rtLockWindow (g.MGWnd);
  215.   IF geladen THEN
  216.     e.RemHead (ADR(mt.Projects));
  217.     gtx.GTX_FreeWindows (chain, mt.Projects); geladen:=FALSE
  218.   END;
  219.   IF source[0]#0C THEN
  220.     error:=gtx.GTX_LoadGUI (chain,ADR(source),
  221.                         gtx.rgGUI,ADR(mt.GuiData),
  222.                         gtx.rgConfig,ADR(mt.MainConfig),
  223.                         gtx.rgWindowList,ADR(mt.Projects),
  224.                         gtx.rgValid,ADR(ValidBits), u.TAG_DONE);
  225.     geladen:=TRUE;
  226.     IF error=0 THEN
  227.       ptr:=ADR(mt.Projects);
  228.       e.AddHead (ADR(mt.Projects),ADR(ScrNode));
  229.     ELSE
  230.       ptr:=NIL;
  231.       Request (ADR('Unable to load\n"%s"'),ADR(source));
  232.     END;
  233.   ELSE ptr:=NIL; END;
  234.   gt.GT_SetGadgetAttrs (g.MGGadgets[g.GDWindows],g.MGWnd,NIL,
  235.                         gt.GTLV_Labels,ptr,u.TAG_DONE);
  236.   gt.GT_SetGadgetAttrs (g.MGGadgets[g.GDTfrom],g.MGWnd,NIL,
  237.                         gt.GTTX_Text,NIL,u.TAG_DONE);
  238.   gt.GT_SetGadgetAttrs (g.MGGadgets[g.GDTto],g.MGWnd,NIL,
  239.                         gt.GTTX_Text,NIL,u.TAG_DONE);
  240.   IF ptr=NIL THEN
  241.     Disable (g.GDAll); Enable (g.GDFont); Enable (g.GDSys);
  242.   ELSE
  243.     Enable (g.GDAll);
  244.     IF gtx.FontAdapt IN mt.MainConfig.configFlags0 THEN
  245.       Disable (g.GDFont); Enable (g.GDSys);
  246.     ELSE
  247.       Enable (g.GDFont); Disable (g.GDSys);
  248.     END;
  249.   END;
  250.   Disable (g.GDSelect);
  251.   rt.rtUnlockWindow (g.MGWnd,lock);
  252. END ZeigListe;
  253.  
  254. PROCEDURE FindNode(nr:INTEGER):mt.Pstr256;
  255. VAR pw: gtx.ProjectWindowPtr;
  256. BEGIN
  257.   pw := mt.Projects.head;
  258.   WHILE nr>0 DO
  259.     pw := pw^.succ; DEC (nr);
  260.   END;
  261.   RETURN ADR(pw^.name);
  262. END FindNode;
  263.  
  264. PROCEDURE setConfig (Config:LONGSET);
  265. TYPE TgdID=ARRAY [1..6] OF INTEGER;
  266. VAR nr:INTEGER;
  267.     flag:BOOLEAN;
  268.     gdID:TgdID;
  269. BEGIN
  270.   gdID:=[g.GDFont,g.GDSys,g.GDRaster,g.GDMouse,g.GDPort,g.GDIcon];
  271.   FOR nr:=1 TO 6 DO
  272.     IF nr IN Config THEN flag:=TRUE
  273.                     ELSE flag:=FALSE; END;
  274.     gt.GT_SetGadgetAttrs (g.MGGadgets[gdID[nr]],g.MGWnd,NIL,
  275.                           gt.GTCB_Checked,flag,u.TAG_DONE);
  276.   END;
  277. END setConfig;
  278.  
  279. PROCEDURE LoadConfig (VAR Config:LONGSET);
  280. CONST name="ENV:GadToolsBox/GenMod.prefs";
  281. VAR dat:d.FileHandlePtr;
  282.     head:TConHead;
  283.     conf:ARRAY [1..3] OF LONGSET;
  284. BEGIN
  285.   dat:=d.Open (ADR(name),d.MODE_OLDFILE);
  286.   IF dat#NIL THEN
  287.     IF (d.Read (dat,ADR(head),SIZE(ConHead))=SIZE(ConHead)) AND
  288.        (st.memcmp (ADR(head),ADR(ConHead),SIZE(ConHead))=0) AND
  289.        (d.Read (dat,ADR(conf),SIZE(conf))=SIZE(conf)) THEN
  290.       Config:=conf[1];
  291.     ELSE
  292.       Request (ADR('Error while loading\n"%s"'),ADR(name));
  293.     END;
  294.     d.Close (dat);
  295.   END;
  296. END LoadConfig;
  297.  
  298. PROCEDURE SaveConfig (Config:LONGSET);
  299. VAR dat:d.FileHandlePtr;
  300.     conf:ARRAY [1..3] OF LONGSET;
  301.     name:str40;
  302.     nr:INTEGER;
  303. BEGIN
  304.   conf[1]:=Config; conf[2]:=LONGSET{}; conf[3]:=LONGSET{};
  305.   name:="ENVARC:GadToolsBox/GenMod.prefs";
  306.   FOR nr:=1 TO 2 DO
  307.     dat:=d.Open (ADR(name),d.MODE_NEWFILE);
  308.     IF dat#NIL THEN
  309.       IF NOT( (d.Write (dat,ADR(ConHead),SIZE(ConHead))=SIZE(ConHead)) AND
  310.               (d.Write (dat,ADR(conf),SIZE(conf))=SIZE(conf)) ) THEN
  311.         Request (ADR('Unable to save\n"%s"'),ADR(name));
  312.       END;
  313.       d.Close (dat);
  314.     ELSE
  315.       Request (ADR('Unable to open\n"%s"'),ADR(name));
  316.     END;
  317.     name:="ENV:GadToolsBox/GenMod.prefs";
  318.   END;  (* FOR *)
  319. END SaveConfig;
  320.  
  321. VAR wahlID:INTEGER;
  322.     Grenzen:ARRAY [0..1] OF INTEGER;
  323.  
  324. PROCEDURE butSelect (VAR GDid:INTEGER);
  325. VAR fnm:mt.Pstr256;
  326.     str:STRING;
  327. BEGIN
  328.   IF (Grenzen[0]>0) OR (Grenzen[1]>0) THEN
  329.     IF (mt.dest[0]=0C) AND FileReq (mt.dest,g.GDDest,TRUE) THEN END;
  330.     IF mt.dest[0]=0C THEN GDid:=-1; END;
  331.   END;
  332.   IF (GDid=g.GDSelect) AND (mt.screen[0]=0C) THEN
  333.     st.strcpy(mt.screen,mt.source);
  334.     fnm := ADDRESS(d.PathPart (ADR(mt.screen)));
  335.     IF fnm # NIL THEN
  336.       IF fnm^[0] = '/' THEN fnm:=mt.Pstr256(ADDRESS(fnm)+1); END;
  337.       str:=st.strchr (fnm^,'.');
  338.       IF str#NIL THEN str^[0]:=0C; END;
  339.       st.strcat (mt.screen,"Scr");
  340.     END;
  341.     IF (NOT FileReq (mt.screen,g.GDScreen,TRUE)) OR (mt.screen[0]=0C) THEN
  342.       GDid:=-1;
  343.     END;
  344.   END;
  345. END butSelect;
  346.  
  347. PROCEDURE HandleMG(VAR GDid:INTEGER): BOOLEAN;
  348. CONST shortcuts="CDEFTOURMPIBVAS";
  349. TYPE TgdID=ARRAY [0..14] OF INTEGER;
  350. VAR imsgPtr: I.IntuiMessagePtr;
  351.     imsg: I.IntuiMessage;
  352.     done: BOOLEAN;
  353.     gad:I.GadgetPtr;
  354.     nr:INTEGER;
  355.     ptr:ADDRESS;
  356.     gadID:TgdID;
  357. BEGIN
  358.   gadID:=[g.GDSource,g.GDDest,g.GDScreen,g.GDTfrom,g.GDTto,g.GDFont,
  359.           g.GDSys,g.GDRaster,g.GDMouse,g.GDPort,g.GDIcon,g.GDAbout,
  360.           g.GDSave,g.GDAll,g.GDSelect];
  361.   done := FALSE; GDid:=-1;
  362.   LOOP
  363.     imsgPtr:= gt.GT_GetIMsg (g.MGWnd^.UserPort);
  364.     IF imsgPtr = NIL THEN EXIT END;
  365.     imsg:=imsgPtr^;
  366.     gt.GT_ReplyIMsg (imsgPtr);
  367.     IF (I.CLOSEWINDOW<=imsg.Class) THEN
  368.       done := TRUE;
  369.     ELSIF I.REFRESHWINDOW<=imsg.Class THEN
  370.       gt.GT_BeginRefresh (g.MGWnd);
  371.       g.MGRender;
  372.       gt.GT_EndRefresh (g.MGWnd, TRUE);
  373.     ELSIF imsg.Class<=I.GADGETDOWN+I.GADGETUP THEN
  374.       gad:=imsg.IAddress; GDid:=gad^.GadgetID;
  375.       CASE GDid OF
  376.         g.GDFont: IF mt.GenOpenFont IN MConfig THEN EXCL (MConfig,mt.GenOpenFont)
  377.                                            ELSE INCL (MConfig,mt.GenOpenFont); END;
  378.        |g.GDSys: IF mt.SysFont IN MConfig THEN EXCL (MConfig,mt.SysFont)
  379.                                       ELSE INCL (MConfig,mt.SysFont); END;
  380.        |g.GDRaster: IF mt.raster IN MConfig THEN EXCL (MConfig,mt.raster)
  381.                                         ELSE INCL (MConfig,mt.raster); END;
  382.        |g.GDMouse: IF mt.mouse IN MConfig THEN EXCL (MConfig,mt.mouse)
  383.                                       ELSE INCL (MConfig,mt.mouse); END;
  384.        |g.GDPort: IF mt.port IN MConfig THEN EXCL (MConfig,mt.port)
  385.                                     ELSE INCL (MConfig,mt.port); END;
  386.        |g.GDIcon: IF mt.icon IN MConfig THEN EXCL (MConfig,mt.icon)
  387.                                     ELSE INCL (MConfig,mt.icon); END;
  388.        |g.GDSource: st.strcpy (mt.source,gad^.SpecialInfo(I.StringInfoPtr)^.Buffer);
  389.                     ZeigListe (mt.source);
  390.                     Grenzen[0]:=-1; Grenzen[1]:=-1;
  391.        |g.GDFsource: IF FileReq (mt.source,g.GDSource,FALSE) THEN
  392.                        ZeigListe (mt.source);
  393.                        Grenzen[0]:=-1; Grenzen[1]:=-1;
  394.                      END;
  395.        |g.GDFdest: IF FileReq (mt.dest,g.GDDest,FALSE) THEN END;
  396.        |g.GDFscreen: IF FileReq (mt.screen,g.GDScreen,FALSE) THEN END;
  397.        |g.GDWindows: Grenzen[ORD(wahlID=g.GDTto)]:=imsg.Code;
  398.             gt.GT_SetGadgetAttrs (g.MGGadgets[wahlID],g.MGWnd,NIL,
  399.                      gt.GTTX_Text,FindNode(imsg.Code),u.TAG_DONE);
  400.             Enable (g.GDSelect);
  401.        |g.GDFrom: IF imsg.Code=0 THEN wahlID:=g.GDTfrom
  402.                                  ELSE wahlID:=g.GDTto; END;
  403.        |g.GDAbout: about;
  404.        |g.GDSave: SaveConfig (MConfig);
  405.        |g.GDAll: IF (mt.dest[0]=0C) AND FileReq (mt.dest,g.GDDest,TRUE) THEN END;
  406.                  IF mt.dest[0]=0C THEN GDid:=-1; END;
  407.        |g.GDSelect: butSelect (GDid);
  408.        |g.GDQuit: done:=TRUE;
  409.       ELSE
  410.       END;
  411.     ELSIF I.VANILLAKEY<=imsg.Class THEN
  412.       nr:=-1;
  413.       ptr:=st.strchr(shortcuts,CAP(CHR(imsg.Code)));
  414.       IF ptr#NIL THEN nr:=ptr-ADR(shortcuts); END;
  415.       IF (nr>=0) AND (nr<=14) AND
  416.          (I.GADGDISABLED<=g.MGGadgets[gadID[nr]]^.Flags) THEN nr:=-1; END;
  417.       CASE nr OF
  418.        |0..2: IF I.ActivateGadget (g.MGGadgets[gadID[nr]],g.MGWnd,NIL) THEN END;
  419.        |3,4: gt.GT_SetGadgetAttrs (g.MGGadgets[g.GDFrom],g.MGWnd,NIL,
  420.                                    gt.GTMX_Active,nr-3,u.TAG_DONE);
  421.              wahlID:=gadID[nr];
  422.        |5..10: DEC (nr,4);
  423.                IF nr IN MConfig THEN EXCL (MConfig,nr)
  424.                                 ELSE INCL (MConfig,nr); END;
  425.                setConfig (MConfig);
  426.        |11: about;
  427.        |12: SaveConfig (MConfig);
  428.        |13: IF (mt.dest[0]=0C) AND FileReq (mt.dest,g.GDDest,TRUE) THEN END;
  429.             IF mt.dest[0]#0C THEN GDid:=gadID[nr]; END;
  430.        |14: GDid:=gadID[nr];
  431.             butSelect (GDid);
  432.       ELSE
  433.       END;
  434.     END;
  435.   END; (* LOOP *)
  436.   st.strcpy (mt.dest,g.MGGadgets[g.GDDest]^.SpecialInfo(I.StringInfoPtr)^.Buffer);
  437.   st.strcpy (mt.screen,g.MGGadgets[g.GDScreen]^.SpecialInfo(I.StringInfoPtr)^.Buffer);
  438.   RETURN done;
  439. END HandleMG;
  440.  
  441. PROCEDURE OpenReq(VAR start,end:INTEGER):BOOLEAN;
  442. VAR quit: BOOLEAN;
  443.     id:INTEGER;
  444. BEGIN
  445.   IF geladen THEN
  446.     e.AddHead (ADR(mt.Projects),ADR(ScrNode));
  447.   END;
  448.   REPEAT
  449.     quit:= (d.SIGBREAKB_CTRL_C IN e.Wait (LONGSET {g.MGWnd^.UserPort^.mp_SigBit,
  450.                                                    d.SIGBREAKB_CTRL_C}));
  451.     quit:= quit OR HandleMG(id);
  452.   UNTIL quit OR (id=g.GDAll) OR (id=g.GDSelect);
  453.   IF geladen THEN
  454.     e.RemHead (ADR(mt.Projects));
  455.   END;
  456.   IF quit THEN
  457.     g.CloseMGWindow;
  458.     g .CloseDownScreen;
  459.     IF filereq#NIL THEN rt.rtFreeRequest (filereq); filereq:=NIL; END;
  460.   ELSE
  461.     IF id=g.GDAll THEN
  462.       start:=-1; end:=-1;
  463.     ELSE
  464.       IF Grenzen[0]<Grenzen[1] THEN start:=Grenzen[0]; end:=Grenzen[1];
  465.                                ELSE start:=Grenzen[1]; end:=Grenzen[0]; END;
  466.       IF start=-1 THEN start:=end; END;
  467.     END;
  468.   END;
  469.   RETURN quit;
  470. END OpenReq;
  471.  
  472. PROCEDURE Assert (cond:BOOLEAN; str:STRING);
  473. BEGIN
  474.   IF NOT cond THEN _ErrorReq (str," "); END;
  475. END Assert;
  476.  
  477. PROCEDURE InitReq;
  478. VAR anz:LONGINT;
  479. BEGIN
  480.   ScrNode.name:=ADR(ScrNode.str);
  481.   wahlID:=g.GDTfrom; Grenzen[0]:=-1; Grenzen[1]:=-1;
  482.   LoadConfig (MConfig);
  483.   filereq := rt.rtAllocRequestA (rt.TypeFileReq, NIL);
  484.   Assert ((filereq#NIL),"Error: Out of memory");
  485.   Assert (g.SetupScreen(NIL) = 0, "Unable to set up Screen");
  486.   Assert (g.OpenMGWindow(TRUE) = 0, "Unable to open Window");
  487.   INCL (filereq^.flags,rt.fReqPatGad);
  488.   patGui:="#?(.gui)"; patMod:="#?(.mod|.def)";
  489.   setConfig (MConfig);
  490.   Disable (g.GDAll); Disable (g.GDSelect);
  491.   IF wbStarted AND (WBMsg#NIL) THEN
  492.     d.CurrentDir (WBMsg^.sm_ArgList^[0].wa_Lock);
  493.     anz:=WBMsg^.sm_NumArgs;
  494.     IF anz>3 THEN
  495.       d.NameFromLock (WBMsg^.sm_ArgList^[3].wa_Lock,
  496.                       ADR(mt.screen),SIZE(mt.screen));
  497.       d.AddPart (ADR(mt.screen),WBMsg^.sm_ArgList^[3].wa_Name,
  498.                  SIZE(mt.screen));
  499.     END;
  500.     IF anz>2 THEN
  501.       d.NameFromLock (WBMsg^.sm_ArgList^[2].wa_Lock,
  502.                       ADR(mt.dest),SIZE(mt.dest));
  503.       d.AddPart (ADR(mt.dest),WBMsg^.sm_ArgList^[2].wa_Name,
  504.                  SIZE(mt.dest));
  505.     END;
  506.     IF anz>1 THEN
  507.       d.NameFromLock (WBMsg^.sm_ArgList^[1].wa_Lock,
  508.                       ADR(mt.source),SIZE(mt.source));
  509.       d.AddPart (ADR(mt.source),WBMsg^.sm_ArgList^[1].wa_Name,
  510.                  SIZE(mt.source));
  511.     END;
  512.   END;
  513.   Showtext (g.GDScreen,ADR(mt.screen)); Showtext (g.GDDest,ADR(mt.dest));
  514.   IF mt.source[0]#0C THEN
  515.     Showtext (g.GDSource,ADR(mt.source)); ZeigListe (mt.source);
  516.     IF geladen THEN
  517.       e.RemHead (ADR(mt.Projects));
  518.     END;
  519.   END;
  520. END InitReq;
  521.  
  522. BEGIN
  523.   ScrNode:=[NIL,NIL,0,NIL,"Screen"];
  524.   ConHead:=[MAKEID("FORM"),34,MAKEID("PREF"),MAKEID("VERS"),2,1,
  525.             MAKEID("GENM"),12];
  526.   filereq:=NIL;
  527. CLOSE
  528.   g.CloseMGWindow;
  529.   g.CloseDownScreen;
  530.   IF filereq#NIL THEN rt.rtFreeRequest (filereq); filereq:=NIL; END;
  531. END MGRequest.
  532.